package com.tanhua.server.service;

import com.tanhua.commons.templates.HuanXinTemplate;
import com.tanhua.domain.db.PageResult;
import com.tanhua.domain.db.UserInfo;
import com.tanhua.domain.mg.Friend;
import com.tanhua.domain.vo.FriendLinkedVo;
import com.tanhua.dubbo.api.FriendApi;
import com.tanhua.dubbo.api.UserInfoApi;
import com.tanhua.server.utils.ThreadLocalUtils;
import io.jsonwebtoken.lang.Collections;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

@Service
public class ContactsService {
    //订阅好友服务接口
    @Reference
    private FriendApi friendApi;
    //订阅用户详细信息服务接口
    @Reference
    private UserInfoApi userInfoApi;
    //注入threadLocalUtils
    @Autowired
    private ThreadLocalUtils threadLocalUtils;
    //注入HuanxinTemplate
    @Autowired
    private HuanXinTemplate huanXinTemplate;


    /**
     * 添加联系人
     * @param strangerId
     * @return
     */
    public void addContacts(Long strangerId) {
        //获取当前用户id
        Long currentUserId = threadLocalUtils.getUserId();
        //a.根据当前用户id和陌生人id 查询好友表
        Friend MyAndFriendRelation = friendApi.queryFriend(currentUserId, strangerId);
        //b.如果存在好友关系 那么就再次查询陌生人和当前用户的好友关系
        if (MyAndFriendRelation==null){
            //c.如果不存在那么就直接插入数据
            friendApi.save(currentUserId,strangerId);
        }
        //d.如果查询陌生人和当前用户不存在关联
        Friend friendAndMyRelation = friendApi.queryFriend(strangerId, currentUserId);
        //e.插入数据
        if(friendAndMyRelation==null){
            //c.如果不存在那么就直接插入数据
            friendApi.save(strangerId,currentUserId);
        }
        //f.调用HuanXinTemplate 输入当前用户和好友id
        huanXinTemplate.makeFriends(currentUserId,strangerId);
    }
    /**
     * 查看好友列表
     */
    public PageResult<FriendLinkedVo> queryContacts(Integer page, Integer pagesize, String keyword) {
        //a.获取当前用户的id
        Long currentUserId = threadLocalUtils.getUserId();
        //b.根据当前用户id查询tanhua_users 获得好友集合
        PageResult<Friend> friendPageResult= friendApi.findFriendsById(page,pagesize,currentUserId,keyword);
        //c.创建一个用于存储FriendLinked对象的List集合
        ArrayList<FriendLinkedVo> friendLinkedVos = new ArrayList<>();
        List<Friend> items = friendPageResult.getItems();
        //定义一个增长的变量
        int selfIncreasingVariable=1;
        if (!CollectionUtils.isEmpty(items)){

            //d.遍历List<Friend>集合
            for (Friend friend : items) {
                //c.创建Friendlinked对象
                FriendLinkedVo friendLinkedVo = new FriendLinkedVo();
                //e.根据好友的id 查询userinfo表 返回UserInfo对象
                UserInfo userinfo = userInfoApi.findUserInfoByID(friend.getFriendId());
                //f.复制对象 封装 存储集合
                BeanUtils.copyProperties(userinfo,friendLinkedVo);
                //单独赋值
                friendLinkedVo.setId(selfIncreasingVariable);//列表的id编号 可为空
                friendLinkedVo.setUserId(friend.getFriendId().toString());//列表的好友id
                selfIncreasingVariable++;//自增
                //添加对象到集合
                friendLinkedVos.add(friendLinkedVo);
            }
        }
        //创建一个PageResult对象
        PageResult<FriendLinkedVo> linkedVoPageResult = new PageResult<>();
        //复制
        BeanUtils.copyProperties(friendPageResult,linkedVoPageResult);
        //单独赋值
        linkedVoPageResult.setItems(friendLinkedVos);//分页数据
        //返回给前端
        return linkedVoPageResult;

    }
}
